#include "utility.h"

int is_ip_frame(const uint8_t *frame)
{
    // LOG("frame detact %x %x", frame[12], frame[13]);
    return (frame[12] == 0x08 && frame[13] == 0x00);
}

uint8_t *ip_frame_src_ip(const uint8_t *frame)
{
    uint8_t *src_ip = malloc(4);
    if (!src_ip)
    {
        WARN("ip_frame_src_ip malloc err");
        goto err;
    }

    memcpy(src_ip, &frame[12 + 2 + 12], 4);
    LOG("ip frame src ip");
    print_arr(src_ip, 4, 'd');
    return src_ip;
err:
    return NULL;
}
uint8_t *ip_frame_dest_ip(const uint8_t *frame)
{
    uint8_t *dest_ip = malloc(4);
    if (!dest_ip)
    {
        WARN("ip_frame_dest_ip malloc err");
        goto err;
    }
    memcpy(dest_ip, &frame[12 + 2 + 12 + 4], 4);
    LOG("ip frame dest ip");
    print_arr(dest_ip, 4, 'd');
    return dest_ip;
err:
    return NULL;
}
int frame_src_mac_eq_mac(const uint8_t *mac, const uint8_t *frame)
{
    return !memcmp(mac, &frame[6], 6);
}
int frame_dest_mac_eq_mac(const uint8_t *mac, const uint8_t *frame)
{
    return !memcmp(mac, &frame[0], 6);
}
int frame_src_ip_eq_ip(const uint8_t *ip, const uint8_t *frame)
{
    return !memcmp(ip, &frame[12 + 2 + 12], 4);
}
int frame_dest_ip_eq_ip(const uint8_t *ip, const uint8_t *frame)
{
    return !memcmp(ip, &frame[12 + 2 + 12 + 4], 4);
}